/*
 * JInternalFrameAdministracionCodificacion.java
 *
 * Created on 25-oct-2011, 19:23:03
 */
package com.ufps.cuatro.vistas.codificacion;

import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JFileChooser;
import javax.swing.JTree;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.table.TableColumn;
import javax.swing.tree.DefaultMutableTreeNode;

import org.jdesktop.application.Action;
import org.jdesktop.application.Task;

import com.ufps.cuatro.CuatroApp;
import com.ufps.cuatro.controlador.listener.ControllerListenerPopupJTree;
import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.modelo.analizador.UtilAnalizador;
import com.ufps.cuatro.modelo.codificacion.UtilCodificacion;
import com.ufps.cuatro.modelo.representacion.UtilRepresentacion;
import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorClaseCompleja;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorEnum;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorString;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorUnitario;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorVinculador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegrador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorMetodo;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorSimple;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorModeloAsociado;
import com.ufps.cuatro.util.Bandera;
import com.ufps.cuatro.util.InformacionNodo;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.editor.MyColumnCellComboBoxEditor;
import com.ufps.cuatro.util.generadores.ConfiguracionGeneradorCodigo;
import com.ufps.cuatro.util.generadores.GeneradorArbol;
import com.ufps.cuatro.util.generadores.GeneradorCodigoFuente;
import com.ufps.cuatro.util.model.MyTableModelEstructuraPaquete;
import com.ufps.cuatro.util.opciones.MyPreferences;
import com.ufps.cuatro.util.opciones.UtilOpciones;
import com.ufps.cuatro.util.render.MyComboBoxRenderer;
import com.ufps.cuatro.util.render.MyPanelCellRendererEstructuraPaquete;
import com.ufps.cuatro.util.render.MyTreeCellRender;

/**
 *
 * @author Carlos A. Torres C. 
 */
public class JInternalFrameAdministracionCodificacion extends javax.swing.JInternalFrame implements Observer{
    private static final long serialVersionUID = 6992143741383602277L;
    
    private Object objComponenteContenedorSeleccionado;        
    private Object objComponenteIntegradorSeleccionado;      
    private Object objComponenteGeneradorClaseSeleccionado;
    private Object objComponenteModeloAsociadoSeleccionado;
    private String strPathProject = "";
    private boolean addResourcesToProject = false;
    private boolean compressProjectToZip = false;
    

    /** Creates new form JInternalFrameAdministracionCodificacion */
    public JInternalFrameAdministracionCodificacion() {
        initComponents();        
        this.setFrameIcon(Utileria.leerIconoApp(Utileria.MODO_16x16));        
        this.crearArbolComponentesContenedores();
        this.crearArbolComponentesIntegradores();
        this.crearArbolComponentesGeneradoresClases();
        this.crearArbolComponentesModeloAsociados();
        this.reloadPaquetes();                       
        this.strPathProject = Utileria.strPathUser;
        this.jTextFieldRuta.setText(strPathProject);
        if(UtilAnalizador.objClases == null){
            jButtonCompile.setEnabled(false);
        }
        else if(UtilAnalizador.objClases.isEmpty()){
            jButtonCompile.setEnabled(false);
        } 
        this.addInternalFrameListener(new InternalFrameAdapter() {
            public void windowClosing(WindowEvent we) {
                ControllerListenerPopupJTree.objView = null;
            }
        });
        addResourcesToProject = UtilOpciones.objPreferences.getObjPreferencias().getBoolean("addResourcesToProject", false);
        //compressProjectToZip  = UtilOpciones.objPreferences.getObjPreferencias().getBoolean("compressProjectToZip", false);
        compressProjectToZip = false;
        jCheckBoxAddResourcesToProject.setSelected(addResourcesToProject);
        jCheckBoxCompressProjectToZip.setSelected(compressProjectToZip);        
        jCheckBoxCompressProjectToZip.setVisible(false);
        this.addInternalFrameListener(Utileria.getSetModeAppInternalFrame(Utileria.SourceCodeMode));
    }
    
    private boolean crearArbolComponentesContenedores(){
        ArrayList<ComponenteDistribuidorContenedor> objTempComponentesContenedores =
                UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesContenedores();
        DefaultMutableTreeNode objRaiz = 
                GeneradorArbol.crearEstructuraColeccionComponentesContenedores(objTempComponentesContenedores);                                   
        JTree objArbol = new JTree(objRaiz);
        this.jTreeComponentesContenedores.setModel(objArbol.getModel());
        MyTreeCellRender objRender = new MyTreeCellRender(Utileria.ARBOL_COMPONENTES);
        this.jTreeComponentesContenedores.setCellRenderer(objRender);        
        this.jTreeComponentesContenedores.setSelectionRow(0);               
        return true;
    }
    
    private boolean crearArbolComponentesIntegradores(){
        ArrayList<ComponenteDistribuidorIntegrador> objTempComponentesIntegradores =
                UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesIntegradores();
        DefaultMutableTreeNode objRaiz = 
                GeneradorArbol.crearEstructuraColeccionComponentesIntegradores(objTempComponentesIntegradores);                                   
        JTree objArbol = new JTree(objRaiz);
        this.jTreeComponentesIntegradores.setModel(objArbol.getModel());
        MyTreeCellRender objRender = new MyTreeCellRender(Utileria.ARBOL_COMPONENTES);
        this.jTreeComponentesIntegradores.setCellRenderer(objRender);        
        this.jTreeComponentesIntegradores.setSelectionRow(0);                       
        return true;
    }
    
    private boolean crearArbolComponentesGeneradoresClases(){
        ArrayList<ComponenteDistribuidorGeneradorClaseCompleja> objTempComponenteDistribuidorGeneradorClase =
                UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionRepresentacionesClase();
        DefaultMutableTreeNode objRaiz = 
                GeneradorArbol.crearEstructuraColeccionComponentesGeneradoresClase(objTempComponenteDistribuidorGeneradorClase);                                   
        JTree objArbol = new JTree(objRaiz);
        this.jTreeComponentesGeneradoresClase.setModel(objArbol.getModel());
        MyTreeCellRender objRender = new MyTreeCellRender(Utileria.ARBOL_COMPONENTES);
        this.jTreeComponentesGeneradoresClase.setCellRenderer(objRender);        
        this.jTreeComponentesGeneradoresClase.setSelectionRow(0);                    
        return true;
    }
    
    private boolean crearArbolComponentesModeloAsociados(){
        ArrayList<ComponenteDistribuidorModeloAsociado> objTempComponenteDistribuidorModeloAsociado =
                UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionModelosAsociados();
        DefaultMutableTreeNode objRaiz = 
                GeneradorArbol.crearEstructuraColeccionComponentesModelosAsociados(objTempComponenteDistribuidorModeloAsociado);                                   
        JTree objArbol = new JTree(objRaiz);
        this.jTreeComponentesModelosAsociados.setModel(objArbol.getModel());
        MyTreeCellRender objRender = new MyTreeCellRender(Utileria.ARBOL_COMPONENTES);
        this.jTreeComponentesModelosAsociados.setCellRenderer(objRender);        
        this.jTreeComponentesModelosAsociados.setSelectionRow(0);                
        return true;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBar1 = new javax.swing.JToolBar();
        jButtonCompile = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        jButton1 = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        jButton2 = new javax.swing.JButton();
        jSplitPane1 = new javax.swing.JSplitPane();
        jTabbedPaneComponentes = new javax.swing.JTabbedPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTreeComponentesContenedores = new javax.swing.JTree();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTreeComponentesIntegradores = new javax.swing.JTree();
        jScrollPane5 = new javax.swing.JScrollPane();
        jTreeComponentesGeneradoresClase = new javax.swing.JTree();
        jScrollPane7 = new javax.swing.JScrollPane();
        jTreeComponentesModelosAsociados = new javax.swing.JTree();
        jTabbedPaneOpciones = new javax.swing.JTabbedPane();
        jPanel2 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        jTextFieldUsuario = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextFieldRuta = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jTextFieldNombreProyecto = new javax.swing.JTextField();
        jButton5 = new javax.swing.JButton();
        jCheckBoxAddResourcesToProject = new javax.swing.JCheckBox();
        jLabel7 = new javax.swing.JLabel();
        jCheckBoxCompressProjectToZip = new javax.swing.JCheckBox();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jToolBar2 = new javax.swing.JToolBar();
        jButton4 = new javax.swing.JButton();
        jTabbedPaneEstructuraPaquetes = new javax.swing.JTabbedPane();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTableComponentesContenedores = new javax.swing.JTable();
        jScrollPane4 = new javax.swing.JScrollPane();
        jTableComponentesIntegradores = new javax.swing.JTable();
        jScrollPane6 = new javax.swing.JScrollPane();
        jTableComponentesGeneradoresClase = new javax.swing.JTable();
        jScrollPane8 = new javax.swing.JScrollPane();
        jTableComponentesModelosAsociados = new javax.swing.JTable();

        setClosable(true);
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(JInternalFrameAdministracionCodificacion.class);
        setTitle(resourceMap.getString("Form.title")); // NOI18N
        setName("Form"); // NOI18N

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);
        jToolBar1.setName("jToolBar1"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(JInternalFrameAdministracionCodificacion.class, this);
        jButtonCompile.setAction(actionMap.get("compileProject")); // NOI18N
        jButtonCompile.setFocusable(false);
        jButtonCompile.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonCompile.setName("jButtonCompile"); // NOI18N
        jButtonCompile.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonCompile);

        jSeparator2.setName("jSeparator2"); // NOI18N
        jToolBar1.add(jSeparator2);

        jButton1.setAction(actionMap.get("cerrar")); // NOI18N
        jButton1.setFocusable(false);
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setName("jButton1"); // NOI18N
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButton1);

        jSeparator1.setName("jSeparator1"); // NOI18N
        jToolBar1.add(jSeparator1);

        jButton2.setAction(actionMap.get("help")); // NOI18N
        jButton2.setFocusable(false);
        jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton2.setName("jButton2"); // NOI18N
        jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButton2);

        jSplitPane1.setDividerLocation(400);
        jSplitPane1.setName("jSplitPane1"); // NOI18N
        jSplitPane1.setOneTouchExpandable(true);

        jTabbedPaneComponentes.setName("jTabbedPaneComponentes"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        jTreeComponentesContenedores.setName("jTreeComponentesContenedores"); // NOI18N
        jTreeComponentesContenedores.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeComponentesContenedoresValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jTreeComponentesContenedores);

        jTabbedPaneComponentes.addTab(resourceMap.getString("jScrollPane1.TabConstraints.tabTitle"), jScrollPane1); // NOI18N

        jScrollPane3.setName("jScrollPane3"); // NOI18N

        jTreeComponentesIntegradores.setName("jTreeComponentesIntegradores"); // NOI18N
        jTreeComponentesIntegradores.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeComponentesIntegradoresValueChanged(evt);
            }
        });
        jScrollPane3.setViewportView(jTreeComponentesIntegradores);

        jTabbedPaneComponentes.addTab(resourceMap.getString("jScrollPane3.TabConstraints.tabTitle"), jScrollPane3); // NOI18N

        jScrollPane5.setName("jScrollPane5"); // NOI18N

        jTreeComponentesGeneradoresClase.setName("jTreeComponentesGeneradoresClase"); // NOI18N
        jTreeComponentesGeneradoresClase.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeComponentesGeneradoresClaseValueChanged(evt);
            }
        });
        jScrollPane5.setViewportView(jTreeComponentesGeneradoresClase);

        jTabbedPaneComponentes.addTab(resourceMap.getString("jScrollPane5.TabConstraints.tabTitle"), jScrollPane5); // NOI18N

        jScrollPane7.setName("jScrollPane7"); // NOI18N

        jTreeComponentesModelosAsociados.setName("jTreeComponentesModelosAsociados"); // NOI18N
        jTreeComponentesModelosAsociados.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeComponentesModelosAsociadosValueChanged(evt);
            }
        });
        jScrollPane7.setViewportView(jTreeComponentesModelosAsociados);

        jTabbedPaneComponentes.addTab(resourceMap.getString("jScrollPane7.TabConstraints.tabTitle"), jScrollPane7); // NOI18N

        jSplitPane1.setLeftComponent(jTabbedPaneComponentes);

        jTabbedPaneOpciones.setName("jTabbedPaneOpciones"); // NOI18N

        jPanel2.setName("jPanel2"); // NOI18N

        jLabel3.setBackground(resourceMap.getColor("jLabel3.background")); // NOI18N
        jLabel3.setIcon(resourceMap.getIcon("jLabel3.icon")); // NOI18N
        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabel3.setName("jLabel3"); // NOI18N
        jLabel3.setOpaque(true);

        jTextFieldUsuario.setText(resourceMap.getString("jTextFieldUsuario.text")); // NOI18N
        jTextFieldUsuario.setName("jTextFieldUsuario"); // NOI18N

        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setName("jLabel4"); // NOI18N

        jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
        jLabel5.setName("jLabel5"); // NOI18N

        jTextFieldRuta.setEditable(false);
        jTextFieldRuta.setText(resourceMap.getString("jTextFieldRuta.text")); // NOI18N
        jTextFieldRuta.setName("jTextFieldRuta"); // NOI18N

        jLabel6.setText(resourceMap.getString("jLabel6.text")); // NOI18N
        jLabel6.setName("jLabel6"); // NOI18N

        jTextFieldNombreProyecto.setEditable(false);
        jTextFieldNombreProyecto.setText(resourceMap.getString("jTextFieldNombreProyecto.text")); // NOI18N
        jTextFieldNombreProyecto.setName("jTextFieldNombreProyecto"); // NOI18N

        jButton5.setAction(actionMap.get("savePath")); // NOI18N
        jButton5.setText(resourceMap.getString("jButton5.text")); // NOI18N
        jButton5.setName("jButton5"); // NOI18N

        jCheckBoxAddResourcesToProject.setAction(actionMap.get("addResourcesToProject")); // NOI18N
        jCheckBoxAddResourcesToProject.setSelected(true);
        jCheckBoxAddResourcesToProject.setText(resourceMap.getString("jCheckBoxAddResourcesToProject.text")); // NOI18N
        jCheckBoxAddResourcesToProject.setName("jCheckBoxAddResourcesToProject"); // NOI18N

        jLabel7.setText(resourceMap.getString("jLabel7.text")); // NOI18N
        jLabel7.setName("jLabel7"); // NOI18N

        jCheckBoxCompressProjectToZip.setAction(actionMap.get("compressProjectToZip")); // NOI18N
        jCheckBoxCompressProjectToZip.setText(resourceMap.getString("jCheckBoxCompressProjectToZip.text")); // NOI18N
        jCheckBoxCompressProjectToZip.setName("jCheckBoxCompressProjectToZip"); // NOI18N

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextFieldNombreProyecto, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
                        .addGap(81, 81, 81))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jCheckBoxCompressProjectToZip, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jCheckBoxAddResourcesToProject, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTextFieldUsuario, javax.swing.GroupLayout.DEFAULT_SIZE, 216, Short.MAX_VALUE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                                        .addComponent(jTextFieldRuta, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jButton5))))
                            .addComponent(jLabel7))
                        .addContainerGap())))
        );

        jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel4, jLabel5, jLabel6});

        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextFieldUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel5)
                            .addComponent(jTextFieldRuta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(10, 10, 10)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel6)
                            .addComponent(jTextFieldNombreProyecto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jCheckBoxAddResourcesToProject)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jCheckBoxCompressProjectToZip)
                .addContainerGap(257, Short.MAX_VALUE))
        );

        jTabbedPaneOpciones.addTab(resourceMap.getString("jPanel2.TabConstraints.tabTitle"), jPanel2); // NOI18N

        jPanel1.setName("jPanel1"); // NOI18N

        jLabel1.setBackground(resourceMap.getColor("jLabel1.background")); // NOI18N
        jLabel1.setIcon(resourceMap.getIcon("jLabel1.icon")); // NOI18N
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabel1.setName("jLabel1"); // NOI18N
        jLabel1.setOpaque(true);

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jToolBar2.setFloatable(false);
        jToolBar2.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jToolBar2.setRollover(true);
        jToolBar2.setBorderPainted(false);
        jToolBar2.setName("jToolBar2"); // NOI18N

        jButton4.setAction(actionMap.get("adminPaquete")); // NOI18N
        jButton4.setFocusable(false);
        jButton4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton4.setName("jButton4"); // NOI18N
        jButton4.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar2.add(jButton4);

        jTabbedPaneEstructuraPaquetes.setName("jTabbedPaneEstructuraPaquetes"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jTableComponentesContenedores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTableComponentesContenedores.setName("jTableComponentesContenedores"); // NOI18N
        jScrollPane2.setViewportView(jTableComponentesContenedores);

        jTabbedPaneEstructuraPaquetes.addTab(resourceMap.getString("jScrollPane2.TabConstraints.tabTitle"), jScrollPane2); // NOI18N

        jScrollPane4.setName("jScrollPane4"); // NOI18N

        jTableComponentesIntegradores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTableComponentesIntegradores.setName("jTableComponentesIntegradores"); // NOI18N
        jScrollPane4.setViewportView(jTableComponentesIntegradores);

        jTabbedPaneEstructuraPaquetes.addTab(resourceMap.getString("jScrollPane4.TabConstraints.tabTitle"), jScrollPane4); // NOI18N

        jScrollPane6.setName("jScrollPane6"); // NOI18N

        jTableComponentesGeneradoresClase.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTableComponentesGeneradoresClase.setName("jTableComponentesGeneradoresClase"); // NOI18N
        jScrollPane6.setViewportView(jTableComponentesGeneradoresClase);

        jTabbedPaneEstructuraPaquetes.addTab(resourceMap.getString("jScrollPane6.TabConstraints.tabTitle"), jScrollPane6); // NOI18N

        jScrollPane8.setName("jScrollPane8"); // NOI18N

        jTableComponentesModelosAsociados.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTableComponentesModelosAsociados.setName("jTableComponentesModelosAsociados"); // NOI18N
        jScrollPane8.setViewportView(jTableComponentesModelosAsociados);

        jTabbedPaneEstructuraPaquetes.addTab(resourceMap.getString("jScrollPane8.TabConstraints.tabTitle"), jScrollPane8); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTabbedPaneEstructuraPaquetes, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE)
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 277, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jToolBar2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTabbedPaneEstructuraPaquetes, javax.swing.GroupLayout.DEFAULT_SIZE, 341, Short.MAX_VALUE)
                    .addComponent(jToolBar2, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE))
                .addContainerGap())
        );

        jTabbedPaneOpciones.addTab(resourceMap.getString("jPanel1.TabConstraints.tabTitle"), jPanel1); // NOI18N

        jSplitPane1.setRightComponent(jTabbedPaneOpciones);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 775, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 755, Short.MAX_VALUE)
                .addGap(10, 10, 10))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jSplitPane1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTreeComponentesContenedoresValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeComponentesContenedoresValueChanged
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) (evt.getPath().getLastPathComponent());
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodoSeleccionado = (InformacionNodo) nodeInfo;
        try {            
            this.objComponenteContenedorSeleccionado = objNodoSeleccionado.getObjElemento();
            if (node.isRoot()) {
                //El nodo seleccionado es la raiz del arbol                
            } else if (node.isLeaf()) {
                //El nodo seleccionado es una hoja                
            } else {
                //El nodo seleccionado es una rama                
            }  
            this.createPopupMenuComponenteContenedor();
        } catch (java.lang.ClassCastException ex) {
            Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }//GEN-LAST:event_jTreeComponentesContenedoresValueChanged

    private void jTreeComponentesIntegradoresValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeComponentesIntegradoresValueChanged
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) (evt.getPath().getLastPathComponent());
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodoSeleccionado = (InformacionNodo) nodeInfo;
        try {            
            this.objComponenteIntegradorSeleccionado = objNodoSeleccionado.getObjElemento();
            if (node.isRoot()) {
                //El nodo seleccionado es la raiz del arbol                
            } else if (node.isLeaf()) {
                //El nodo seleccionado es una hoja                
            } else {
                //El nodo seleccionado es una rama                
            }  
            this.createPopupMenuComponenteIntegrador();
        } catch (java.lang.ClassCastException ex) {
            Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }//GEN-LAST:event_jTreeComponentesIntegradoresValueChanged

    private void jTreeComponentesGeneradoresClaseValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeComponentesGeneradoresClaseValueChanged
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) (evt.getPath().getLastPathComponent());
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodoSeleccionado = (InformacionNodo) nodeInfo;
        try {            
            this.objComponenteGeneradorClaseSeleccionado = objNodoSeleccionado.getObjElemento();
            if (node.isRoot()) {
                //El nodo seleccionado es la raiz del arbol                
            } else if (node.isLeaf()) {
                //El nodo seleccionado es una hoja                
            } else {
                //El nodo seleccionado es una rama                
            }  
            this.createPopupMenuComponenteGeneradorClase();
        } catch (java.lang.ClassCastException ex) {
            Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }//GEN-LAST:event_jTreeComponentesGeneradoresClaseValueChanged

    private void jTreeComponentesModelosAsociadosValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeComponentesModelosAsociadosValueChanged
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) (evt.getPath().getLastPathComponent());
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodoSeleccionado = (InformacionNodo) nodeInfo;
        try {            
            this.objComponenteModeloAsociadoSeleccionado = objNodoSeleccionado.getObjElemento();
            if (node.isRoot()) {
                //El nodo seleccionado es la raiz del arbol                
            } else if (node.isLeaf()) {
                //El nodo seleccionado es una hoja                
            } else {
                //El nodo seleccionado es una rama                
            }  
            this.createPopupMenuComponenteModeloAsociado();
        } catch (java.lang.ClassCastException ex) {
            Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }//GEN-LAST:event_jTreeComponentesModelosAsociadosValueChanged

    @Action
    public void cerrar() {
        if(UtilRender.confirmarCerrarVentana()){            
            dispose();
        }
    }
    
    private void createPopupMenuComponenteContenedor() {        
        ControllerListenerPopupJTree objMyPopup = new ControllerListenerPopupJTree(this, jTreeComponentesContenedores, objComponenteContenedorSeleccionado);
        ControllerListenerPopupJTree.objView = this;
        this.jTreeComponentesContenedores.addMouseListener(objMyPopup);     
    }        
    
    private void createPopupMenuComponenteIntegrador() {        
        ControllerListenerPopupJTree objMyPopup = new ControllerListenerPopupJTree(this, jTreeComponentesIntegradores, objComponenteIntegradorSeleccionado);
        ControllerListenerPopupJTree.objView = this;
        this.jTreeComponentesIntegradores.addMouseListener(objMyPopup);     
    }  
    
    private void createPopupMenuComponenteGeneradorClase() {        
        ControllerListenerPopupJTree objMyPopup = new ControllerListenerPopupJTree(this, jTreeComponentesGeneradoresClase, objComponenteGeneradorClaseSeleccionado);
        ControllerListenerPopupJTree.objView = this;
        this.jTreeComponentesGeneradoresClase.addMouseListener(objMyPopup);     
    }
    
    private void createPopupMenuComponenteModeloAsociado() {        
        ControllerListenerPopupJTree objMyPopup = new ControllerListenerPopupJTree(this, jTreeComponentesModelosAsociados, objComponenteModeloAsociadoSeleccionado);
        ControllerListenerPopupJTree.objView = this;
        this.jTreeComponentesModelosAsociados.addMouseListener(objMyPopup);     
    }
    
    private void crearTablaEstructuraPaqueteComponentesContenedores() {
        this.jTableComponentesContenedores.setModel(UtilCodificacion.crearTablaEstructuraPaqueteComponentesContenedores(UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesContenedores()));
        this.jTableComponentesContenedores.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);        
        this.jTableComponentesContenedores.setRowHeight(24);        
    }    
    
    private void crearTablaEstructuraPaqueteComponentesIntegradores() {
        this.jTableComponentesIntegradores.setModel(UtilCodificacion.crearTablaEstructuraPaqueteComponentesIntegradores(UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesIntegradores()));
        this.jTableComponentesIntegradores.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);        
        this.jTableComponentesIntegradores.setRowHeight(24);        
    }
    
    private void crearTablaEstructuraPaqueteComponentesGeneradoresClase() {
        this.jTableComponentesGeneradoresClase.setModel(UtilCodificacion.crearTablaEstructuraPaqueteComponentesGeneradoresClase(UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionRepresentacionesClase()));
        this.jTableComponentesGeneradoresClase.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);        
        this.jTableComponentesGeneradoresClase.setRowHeight(24);        
    }
    
    private void crearTablaEstructuraPaqueteComponentesModelosAsociados() {
        this.jTableComponentesModelosAsociados.setModel(UtilCodificacion.crearTablaEstructuraPaqueteComponentesModeloAsociado(UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionModelosAsociados()));
        this.jTableComponentesModelosAsociados.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);        
        this.jTableComponentesModelosAsociados.setRowHeight(24);        
    }
    
    public void update(Observable o, Object arg) {
        if(o instanceof Bandera){
            Bandera objBandera = (Bandera) o;
            if(objBandera.getEstado() == Bandera.COMPONENTE_GENERADOR_CREADO ||
                    objBandera.getEstado() == Bandera.COMPONENTE_INTEGRADOR_CREADO ||
                    objBandera.getEstado() == Bandera.COMPONENTE_CONTENEDOR_CREADO ||                    
                    objBandera.getEstado() == Bandera.GENERADOR_SILENCIOSO_OK ||
                    objBandera.getEstado() == Bandera.PROPIEDADES_ACTUALIZADAS ||
                    objBandera.getEstado() == Bandera.CAMBIAR_NOMBRE ||
                    objBandera.getEstado() == Bandera.ACTUALIZACION_TITULO ||
                    objBandera.getEstado() == Bandera.STATIC_LIST_MODEL_SELECTED ||
                    objBandera.getEstado() == Bandera.MENU_CONTENEDOR ||
                    objBandera.getEstado() == Bandera.UPDATE_COMPONENTE ||
                    objBandera.getObj() instanceof ComponenteDistribuidorIntegrador ||
                    objBandera.getObj() instanceof ComponenteDistribuidorContenedor ||
                    objBandera.getEstado() == Bandera.SELECCION_PROPIEDADES_CLASE_REPRESENTACION ||
                    objBandera.getEstado() == Bandera.UPDATE_COMPONENTE_KEY_ASOCIATE_MODEL ||
                    objBandera.getEstado() == Bandera.UPDATE_COMPONENTE_OBJECT_ASOCIATE_MODEL || 
                    objBandera.getObjOpciones().get(Bandera.OPC_SELECCION_COMPONENTE_DISTRIBUIDOR_OBJECT).equals(true) ||
                    objBandera.getObjOpciones().get(Bandera.OPC_SELECCION_COMPONENTE_DISTRIBUIDOR_KEY).equals(true)){
                crearArbolComponentesContenedores();                           
                crearArbolComponentesIntegradores();
                crearArbolComponentesGeneradoresClases();
                crearArbolComponentesModeloAsociados();                 
                reloadPaquetes();
            }        
            else{
                switch(objBandera.getEstado()){                
                    case Bandera.ACTUALIZAR_ESTRUCTURA_PAQUETES:
                        reloadPaquetes();
                        break;                       
                    case Bandera.PROPIEDADES_ACTUALIZADAS:
                        crearArbolComponentesContenedores();                            
                        crearArbolComponentesIntegradores();
                        crearArbolComponentesGeneradoresClases();
                        crearArbolComponentesModeloAsociados();
                        UtilRender.actualizarLayoutAppExplorer();
                        break;
                }  
            }
        }    
    }

    @Action
    public void addPaquete() {
    }

    @Action
    public void delPaquete() {
    }

    @Action
    public void adminPaquete() {        
        JDialogEstructuraPaquete objDialogo = new JDialogEstructuraPaquete(this);
        CuatroApp.getApplication().show(objDialogo);        
    }
    
    private void reloadPaquetes(){
        ArrayList<String> objPaquetes = UtilRepresentacion.objPaqueteRoot.getPathString();
        Object[] objArrayPaquetes = objPaquetes.toArray();
        
        //Panel para Componentes Contenedores
        crearTablaEstructuraPaqueteComponentesContenedores();
        TableColumn objColumnComponenteContenedores = this.jTableComponentesContenedores.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE);
        objColumnComponenteContenedores.setCellRenderer(new MyPanelCellRendererEstructuraPaquete());
                
        TableColumn objColumnPaqueteContenedores = this.jTableComponentesContenedores.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE);                
        objColumnPaqueteContenedores.setCellRenderer(new MyComboBoxRenderer(objArrayPaquetes));
        objColumnPaqueteContenedores.setCellEditor(new MyColumnCellComboBoxEditor(objArrayPaquetes));                
        
        //Panel para Componentes Integradores        
        crearTablaEstructuraPaqueteComponentesIntegradores();
        TableColumn objColumnComponenteIntegradores = this.jTableComponentesIntegradores.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE);
        objColumnComponenteIntegradores.setCellRenderer(new MyPanelCellRendererEstructuraPaquete());
                
        TableColumn objColumnPaqueteIntegradores = this.jTableComponentesIntegradores.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE);        
        objColumnPaqueteIntegradores.setCellRenderer(new MyComboBoxRenderer(objArrayPaquetes));
        objColumnPaqueteIntegradores.setCellEditor(new MyColumnCellComboBoxEditor(objArrayPaquetes));  
        
        //Panel para Componentes Clases
        crearTablaEstructuraPaqueteComponentesGeneradoresClase();
        TableColumn objColumnComponenteGeneradoresClases = this.jTableComponentesGeneradoresClase.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE);
        objColumnComponenteGeneradoresClases.setCellRenderer(new MyPanelCellRendererEstructuraPaquete());
                
        TableColumn objColumnPaqueteClases = this.jTableComponentesGeneradoresClase.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE);
        objColumnPaqueteClases.setCellRenderer(new MyComboBoxRenderer(objArrayPaquetes));
        objColumnPaqueteClases.setCellEditor(new MyColumnCellComboBoxEditor(objArrayPaquetes));  
        
        //Panel para Modelos Asociados
        crearTablaEstructuraPaqueteComponentesModelosAsociados();
        TableColumn objColumnComponenteModeloAsociado = this.jTableComponentesModelosAsociados.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_COMPONENTE);
        objColumnComponenteModeloAsociado.setCellRenderer(new MyPanelCellRendererEstructuraPaquete());
                
        TableColumn objColumnPaqueteModeloAsociado = this.jTableComponentesModelosAsociados.getColumn(MyTableModelEstructuraPaquete.NAME_COLUMN_PAQUETE);
        objColumnPaqueteModeloAsociado.setCellRenderer(new MyComboBoxRenderer(objArrayPaquetes));
        objColumnPaqueteModeloAsociado.setCellEditor(new MyColumnCellComboBoxEditor(objArrayPaquetes));  
    }

    @Action
    public void help() {
        UtilRender.openDialogHelp(JInternalFrameAdministracionCodificacion.class, getTitle());
    }
    
    private String getPathProject(){
        return jTextFieldRuta.getText() + Utileria.separador + this.jTextFieldNombreProyecto.getText();
    }

    @Action
    public Task compileProject() {
        //aqui van las validaciones incluidas la del formato del archivo
        if(UtilAnalizador.objClases.isEmpty()){
            UtilRender.msgAdvertencia("No se ha Cargado un Jar.", this);
        }
        else if(UtilRepresentacion.objBibliotecaTrabajoLocal.isEmpty()){
            UtilRender.msgAdvertencia("No se han Creado Representaciones.", this);
        }
        else if(!UtilRepresentacion.objBibliotecaTrabajoLocal.canGenerate()){
            UtilRender.msgAdvertencia("No existen Representaciones Incluidas en el Proyecto.", this);
        }
        else{
            File objFile = new File(getPathProject());
            if(objFile.exists()){
                if(!UtilRender.msgConfirmar("El Directorio existe, ¿Desea sobreescribir su contenido?", this)){
                    return null;
                } 
                else{
                    String strUser = this.jTextFieldUsuario.getText();
                    String strNameProject = this.jTextFieldNombreProyecto.getText();
                    ConfiguracionGeneradorCodigo objCFG = new ConfiguracionGeneradorCodigo(strUser, strNameProject, strPathProject, false);
                    objCFG.addResourcesToProject = addResourcesToProject;
                    objCFG.compressProjectToZip = compressProjectToZip;
                    if(GeneradorCodigoFuente.generateProject(objCFG)){                
                        return new CompileProjectTask(org.jdesktop.application.Application.getInstance(), objCFG);
                    }            
                }
            }
            else if(UtilRender.msgConfirmar("¿Desea Generar el Proyecto?")){
                String strUser = this.jTextFieldUsuario.getText();
                String strNameProject = this.jTextFieldNombreProyecto.getText();
                ConfiguracionGeneradorCodigo objCFG = new ConfiguracionGeneradorCodigo(strUser, strNameProject, strPathProject, false);
                if(GeneradorCodigoFuente.generateProject(objCFG)){                
                    return new CompileProjectTask(org.jdesktop.application.Application.getInstance(), objCFG);
                }            
            }
        }
        return null;
    }  

    private class CompileProjectTask extends org.jdesktop.application.Task<Object, Void> {
        private ConfiguracionGeneradorCodigo objCFG = null;
        CompileProjectTask(org.jdesktop.application.Application app, ConfiguracionGeneradorCodigo objCFG) {
            // Runs on the EDT.  Copy GUI state that
            // doInBackground() depends on from parameters
            // to CompileProjectTask fields, here.
            super(app);            
            this.objCFG = objCFG;            
            mostrar("Inicializando Referencias", 10, 0, 100, 1000);            
        }
        @Override protected Object doInBackground() {
            try{
                
//                if(addResourcesToProject){//Inlucir Recursos en el Modelo
//                    if(UtilRepresentacion.objBibliotecaTrabajoLocal.existsResourcesImage()){
//                        mostrar("Compilando Rutas de Recursos de Archivos...", 10, 0, 100, 1000);
//                        ArrayList<ComponenteGenerado> objComponentes = 
//                                UtilRepresentacion.objBibliotecaTrabajoLocal.getComponentesWithResourceImage();                        
//                        if(!objComponentes.isEmpty()){//Existen Componentes con Recursos.                    
//                            GeneradorCodigoFuente.buildPathSourceFileProperties(objComponentes);
//                        }                                
//                    }
//                }
                
                String strPathRoot = objCFG.strPathProyecto + Utileria.separador +  objCFG.strNombreProyecto;
                mostrar("Creando path del Proyecto: ".concat(strPathRoot), 20, 0, 100, 1000);
                File objRoot = new File(strPathRoot);
                
                //Por defecto evalua si existe el directorio y lo elimina
                if(objRoot.exists()){
                   Utileria.BorrarDirLocal(objRoot); 
                }
                
                objRoot.mkdir();                     
                mostrar("Generando Directorios: ".concat(strPathRoot), 30, 0, 100, 1000);
                
                ArrayList<String> objArchivosGenerados = new ArrayList<String>();
                ArrayList<ComponenteDistribuidorContenedor> objFormularios                  = UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesContenedores();
                ArrayList<ComponenteDistribuidorIntegrador> objPanelesIntegradores          = UtilRepresentacion.objBibliotecaTrabajoLocal.getObjComponentesIntegradores();
                ArrayList<ComponenteDistribuidorGeneradorClaseCompleja> objPanelesClases    = UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionRepresentacionesClase();
                ArrayList<ComponenteDistribuidorModeloAsociado> objModelosAsociados         = UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionModelosAsociados();
                
                int i = objFormularios.size() + objPanelesIntegradores.size() + objPanelesClases.size() + objModelosAsociados.size();
                int j = (int) 69 / ((i > 0) ? i : 1);//Se controla el desbordamiento del proceso a 99
                i = 30;
                
                i = escribirCodigoFuenteFormularios(i, objFormularios, objArchivosGenerados, strPathRoot, j);
                i = escribirCodigoFuentePanelesIntegradores(i, objPanelesIntegradores, objArchivosGenerados, strPathRoot, j);
                i = escribirCodigoFuentePanelesClases(i, objPanelesClases, objArchivosGenerados, strPathRoot, j);
                i = escribirCodigoFuenteModelosAsociados(i, objModelosAsociados, objArchivosGenerados, strPathRoot, j);
                
                mostrar("Liberando Buffer y Cerrando Flujos de Archivos...", i, 0, 100, 1000);
                return new Object();
            }catch(java.lang.Exception ex){
                UtilRender.msgError("No se Pudo Generar el Proyecto.", true);
                Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);            
            }            
            return null;  // return your result
        }

        private int escribirCodigoFuenteModelosAsociados(int i, ArrayList<ComponenteDistribuidorModeloAsociado> objModelosAsociados, ArrayList<String> objArchivosGenerados, String strPathRoot, int j) {
            mostrar("Generación de Dialog para los Modelo Asociados Iniciada...", i, 0, 100, 1000);
            //Por Último se verifica si existen Modelos Asociados
            for(ComponenteDistribuidorModeloAsociado objComponenteDistribuidorModeloAsociado : objModelosAsociados){
                escribirComponente(objComponenteDistribuidorModeloAsociado, objArchivosGenerados, strPathRoot, objCFG);
                mostrar("Procesando Dialogo: ".concat(objComponenteDistribuidorModeloAsociado.getName()), i += j, 0, 100, 250);
                ComponenteDistribuidor objComponenteDistribuidor = objComponenteDistribuidorModeloAsociado.getObjComponenteDistribuidorObject();
                if(!objComponenteDistribuidor.isIncluido()){
                    continue;
                }
                if(objComponenteDistribuidor instanceof ComponenteDistribuidorGeneradorUnitario){
                    escribirComponente((ComponenteDistribuidorGeneradorUnitario) objComponenteDistribuidor, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel Interno (Caso Especial): ".concat(objComponenteDistribuidor.getName()), i, 0, 100, 250);
                }
                else if(objComponenteDistribuidor instanceof ComponenteDistribuidorGeneradorString){
                    escribirComponente((ComponenteDistribuidorGeneradorString) objComponenteDistribuidor, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel Interno (Caso Especial): ".concat(objComponenteDistribuidor.getName()), i, 0, 100, 250);
                }
                else if(objComponenteDistribuidor instanceof ComponenteDistribuidorGeneradorEnum){
                    escribirComponente((ComponenteDistribuidorGeneradorEnum) objComponenteDistribuidor, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel Interno (Caso Especial): ".concat(objComponenteDistribuidor.getName()), i, 0, 100, 250);
                }
                else if(objComponenteDistribuidor instanceof ComponenteDistribuidorGeneradorVinculador){
                    escribirComponente((ComponenteDistribuidorGeneradorVinculador) objComponenteDistribuidor, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel Interno (Caso Especial): ".concat(objComponenteDistribuidor.getName()), i, 0, 100, 250);
                }
            }
            return i;
        }

        private int escribirCodigoFuentePanelesClases(int i, ArrayList<ComponenteDistribuidorGeneradorClaseCompleja> objPanelesClases, ArrayList<String> objArchivosGenerados, String strPathRoot, int j) {
            mostrar("Generación de Contenedores de Clases del Modelo Analizado Iniciada...", i, 0, 100, 1000);
            for(ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidorGeneradorClase : objPanelesClases){
                if(objComponenteDistribuidorGeneradorClase.isIncluido()){
                    escribirComponente(objComponenteDistribuidorGeneradorClase, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel de Clase: ".concat(objComponenteDistribuidorGeneradorClase.getName()), i += j, 0, 100, 500);
                }
            }
            return i;
        }

        private int escribirCodigoFuentePanelesIntegradores(int i, ArrayList<ComponenteDistribuidorIntegrador> objPanelesIntegradores, ArrayList<String> objArchivosGenerados, String strPathRoot, int j) {
            mostrar("Generación de Contenedores Secundarios Iniciada...", i, 0, 100, 1000);
            for(ComponenteDistribuidorIntegrador objComponenteDistribuidorIntegrador : objPanelesIntegradores){
                if(objComponenteDistribuidorIntegrador.isIncluido()){
                    escribirComponente(objComponenteDistribuidorIntegrador, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Panel: ".concat(objComponenteDistribuidorIntegrador.getName()), i += j, 0, 100, 500);
                }
            }
            return i;
        }

        private int escribirCodigoFuenteFormularios(int i, ArrayList<ComponenteDistribuidorContenedor> objFormularios, ArrayList<String> objArchivosGenerados, String strPathRoot, int j) {
            mostrar("Generación de Contenedores Primarios Iniciada...", i, 0, 100, 1000);
            for(ComponenteDistribuidorContenedor objComponenteDistribuidorContenedor : objFormularios){
                if(objComponenteDistribuidorContenedor.isIncluido()){
                    escribirComponente(objComponenteDistribuidorContenedor, objArchivosGenerados, strPathRoot, objCFG);
                    mostrar("Procesando Formulario: ".concat(objComponenteDistribuidorContenedor.getName()), i += j, 0, 100, 500);
                }
            }
            return i;
        }
        @Override protected void succeeded(Object result) {
            // Runs on the EDT.  Update the GUI based on
            // the result computed by doInBackground().
            int opc = 0;
            if(result != null){   
                if(addResourcesToProject){//Inlucir Recursos en el Modelo
                    if(UtilRepresentacion.objBibliotecaTrabajoLocal.existsResourcesImage()){
                        mostrar("Agregando recursos...", 90, 0, 100, 1000);
                        GeneradorCodigoFuente.generateProjectOptionAddResources(objCFG);
                        opc += 1;
                    }
                }
                String strPath = objCFG.strPathProyecto + Utileria.separador + objCFG.strNombreProyecto;
                File objFile = new File(strPath);
                if(compressProjectToZip){//Comprimir Proyecto
                    mostrar("Comprimiendo...", 95, 0, 100, 1000);
                    if(GeneradorCodigoFuente.generateProjectOptionCompressZip(objCFG)){
                        try{
                            if(objFile.exists()){//Elimina cualquier recurso previo agregado.              
                                Utileria.BorrarDirLocal(objFile);
                                objFile.delete();                
                                opc += 2;
                            }
                        }catch(SecurityException ex){
                            mostrar("No se puede Eliminar el Proyecto.", 98, 0, 100, 1000);
                        } 
                    }
                }                                
                mostrar("Proyecto Generado Correctamente.", 0, 0, 100, 1000);                
                if(opc == 2){//Solo Comprimir
                    UtilRender.msgInformacion("El Proyecto ha sido Generado Correctamente.\n", rootPane);
                }
                else{
                    if(UtilRender.msgConfirmar("El Proyecto ha sido Generado Correctamente.\n" + 
                            "\u00bfDesea abrir la ubicaci\u00f3n?", rootPane)){
                        try {
                            if (java.awt.Desktop.isDesktopSupported()) {
                                java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
                                desktop.open(objFile);
                            }
                        } catch (IOException ex) {
                            UtilRender.msgAdvertencia("Error al abrir el Directorio.");
                        } 
                    }
                }
            }
            mostrar("", 0, 0, 100, 500);
        }
        
        private void mostrar(String msg, int i, int ini, int fin, int sleep){
            setMessage(msg);
            UtilRender.printlnConsole(msg, UtilRender.ACTION_NORMAL, false);
            try {
                Thread.sleep(sleep);
            } catch (InterruptedException ex) {
                Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);                
            }
            this.setProgress(i, ini, fin);
        }
        
        private void escribirComponente(ComponenteDistribuidorContenedor objComponenteDistribuidorContenedor, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorContenedor.getName())){
                if(escribirFile(objComponenteDistribuidorContenedor.getObjFileOutput(), objComponenteDistribuidorContenedor.getName(), strPathRoot, objCFG, objComponenteDistribuidorContenedor)){
                    objAlmacenados.add(objComponenteDistribuidorContenedor.getName());
                    for(Componente objComponente : objComponenteDistribuidorContenedor.getComponentesDistribuidos()){
                        if(objComponente instanceof ComponenteDistribuidorIntegrador){
                            ComponenteDistribuidorIntegrador objComponenteDistribuidorIntegrador = (ComponenteDistribuidorIntegrador) objComponente;
                            if(objComponenteDistribuidorIntegrador.isIncluido()){
                                escribirComponente(objComponenteDistribuidorIntegrador, objAlmacenados, strPathRoot, objCFG);
                            }
                        }                   
                    }
                }
            }        
        }

        private void escribirComponente(ComponenteDistribuidorIntegrador objComponenteDistribuidorIntegrador, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){       
            if(objComponenteDistribuidorIntegrador instanceof ComponenteDistribuidorIntegradorMetodo){
                escribirComponente((ComponenteDistribuidorIntegradorMetodo) objComponenteDistribuidorIntegrador, objAlmacenados, strPathRoot, objCFG);
            }
            else if(objComponenteDistribuidorIntegrador instanceof ComponenteDistribuidorIntegradorSimple){
                escribirComponente((ComponenteDistribuidorIntegradorSimple) objComponenteDistribuidorIntegrador, objAlmacenados, strPathRoot, objCFG);
            }              
        }

        private void escribirComponente(ComponenteDistribuidorIntegradorMetodo objComponenteDistribuidorIntegradorMetodo, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorIntegradorMetodo.getName())){
                if(escribirFile(objComponenteDistribuidorIntegradorMetodo.getObjFileOutput(), objComponenteDistribuidorIntegradorMetodo.getName(), strPathRoot, objCFG, objComponenteDistribuidorIntegradorMetodo)){
                    objAlmacenados.add(objComponenteDistribuidorIntegradorMetodo.getName());
                    for(Componente objComponente : objComponenteDistribuidorIntegradorMetodo.getComponentesDistribuidos()){
                        if(objComponente instanceof ComponenteDistribuidorGeneradorClaseCompleja){                            
                            ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidorGenegrador = (ComponenteDistribuidorGeneradorClaseCompleja) objComponente;
                            escribirComponente(objComponenteDistribuidorGenegrador, objAlmacenados, strPathRoot, objCFG);
                        }
                    }
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorIntegradorSimple objComponenteDistribuidorIntegradorSimple, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorIntegradorSimple.getName())){
                if(escribirFile(objComponenteDistribuidorIntegradorSimple.getObjFileOutput(), objComponenteDistribuidorIntegradorSimple.getName(), strPathRoot, objCFG, objComponenteDistribuidorIntegradorSimple)){
                    objAlmacenados.add(objComponenteDistribuidorIntegradorSimple.getName());
                    for(Componente objComponente : objComponenteDistribuidorIntegradorSimple.getComponentesDistribuidos()){                        
                        if(objComponente instanceof ComponenteDistribuidorGeneradorClaseCompleja){                            
                            ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidorGenegrador = (ComponenteDistribuidorGeneradorClaseCompleja) objComponente;
                            if(objComponenteDistribuidorGenegrador.isIncluido()){
                                escribirComponente(objComponenteDistribuidorGenegrador, objAlmacenados, strPathRoot, objCFG);
                            }                            
                        }
                    }
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorGeneradorClaseCompleja objComponenteDistribuidorGeneradorClase, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorGeneradorClase.getName())){
                if(escribirFile(objComponenteDistribuidorGeneradorClase.getObjFileOutput(), objComponenteDistribuidorGeneradorClase.getName(), strPathRoot, objCFG, objComponenteDistribuidorGeneradorClase)){
                    objAlmacenados.add(objComponenteDistribuidorGeneradorClase.getName());
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorModeloAsociado objComponenteDistribuidorModeloAsociado, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorModeloAsociado.getName())){
                if(escribirFile(objComponenteDistribuidorModeloAsociado.getObjFileOutput(), objComponenteDistribuidorModeloAsociado.getName(), strPathRoot, objCFG, objComponenteDistribuidorModeloAsociado)){
                    objAlmacenados.add(objComponenteDistribuidorModeloAsociado.getName());
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorGeneradorUnitario objComponenteDistribuidorGeneradorUnitario, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorGeneradorUnitario.getName())){
                if(escribirFile(objComponenteDistribuidorGeneradorUnitario.getObjFileOutput(), objComponenteDistribuidorGeneradorUnitario.getName(), strPathRoot, objCFG, objComponenteDistribuidorGeneradorUnitario)){
                    objAlmacenados.add(objComponenteDistribuidorGeneradorUnitario.getName());
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorGeneradorString objComponenteDistribuidorGeneradorString, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorGeneradorString.getName())){
                if(escribirFile(objComponenteDistribuidorGeneradorString.getObjFileOutput(), objComponenteDistribuidorGeneradorString.getName(), strPathRoot, objCFG, objComponenteDistribuidorGeneradorString)){
                    objAlmacenados.add(objComponenteDistribuidorGeneradorString.getName());
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorGeneradorEnum objComponenteDistribuidorGeneradorEnum, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorGeneradorEnum.getName())){
                if(escribirFile(objComponenteDistribuidorGeneradorEnum.getObjFileOutput(), objComponenteDistribuidorGeneradorEnum.getName(), strPathRoot, objCFG, objComponenteDistribuidorGeneradorEnum)){
                    objAlmacenados.add(objComponenteDistribuidorGeneradorEnum.getName());
                }
            }
        }

        private void escribirComponente(ComponenteDistribuidorGeneradorVinculador objComponenteDistribuidorGeneradorVinculador, ArrayList<String> objAlmacenados, String strPathRoot, ConfiguracionGeneradorCodigo objCFG){
            if(!objAlmacenados.contains(objComponenteDistribuidorGeneradorVinculador.getName())){
                if(escribirFile(objComponenteDistribuidorGeneradorVinculador.getObjFileOutput(), objComponenteDistribuidorGeneradorVinculador.getName(), strPathRoot, objCFG, objComponenteDistribuidorGeneradorVinculador)){
                    objAlmacenados.add(objComponenteDistribuidorGeneradorVinculador.getName());
                }
            }
        }

        private boolean escribirFile(File objFile, String strNameFile, String strPathRoot, ConfiguracionGeneradorCodigo objCFG, ComponenteDistribuidor objComponenteDistribuidor){
            try {            

                if(objFile == null){                
                    if(GeneradorCodigoFuente.generateCodeMap(objComponenteDistribuidor, objCFG)){
                        objFile = objComponenteDistribuidor.getObjFileOutput();
                    }
                    else{
                        return false;
                    }                
                }

                String strPathRootFile = objCFG.strPathProyecto + Utileria.separador +  objComponenteDistribuidor.getStrPaqueteToFile();
                File objRoot = new File(strPathRootFile);
                if(!objRoot.exists()){
                    objRoot.mkdir();                     
                }           

                String strPath;            
                strPath = UtilAnalizador.eliminarExtension(strPathRootFile + Utileria.separador + strNameFile);
                strPath = strPath.concat(".").concat(Utileria.leerRecursoTexto("Utileria.file.java.ext"));


                objFile.renameTo(new File(strPath));
                PrintStream flujoSalida = new PrintStream(objFile);            
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(flujoSalida));                
                /*
                 * flush and cleanup
                 */
                writer.flush();
                writer.close();                             
                return true;
            } catch (IOException ex) {
                Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);
            }               
            return false;
        }
    }

    @Action
    public void savePath() {
        javax.swing.JFileChooser fc = new JFileChooser();        
        File fileDir;        
        Utileria.strTempDir = UtilOpciones.objPreferences.getString(MyPreferences.FILE_SAVE_PROJECT);

        if (Utileria.strTempDir.compareTo("") == 0) {
            fc.changeToParentDirectory();
        } else {
            fileDir = new File(Utileria.strTempDir);
            fc.setCurrentDirectory(fileDir);
        }
        
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);        

        int option = fc.showDialog(fc, "Guardar Proyecto");

        if (JFileChooser.APPROVE_OPTION == option) {
            try {
                Utileria.strTempDir = fc.getSelectedFile().getCanonicalPath();
                strPathProject = Utileria.strTempDir;
                this.jTextFieldRuta.setText(strPathProject);
                UtilOpciones.objPreferences.addOpcion(MyPreferences.FILE_SAVE_PROJECT, strPathProject);
            } catch (IOException ex) {
                Logger.getLogger(JInternalFrameAdministracionCodificacion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }        
    }

    @Action
    public void addResourcesToProject() {
        addResourcesToProject = this.jCheckBoxAddResourcesToProject.isSelected();
        UtilOpciones.objPreferences.getObjPreferencias().putBoolean("addResourcesToProject", addResourcesToProject);
    }

    @Action
    public void compressProjectToZip() {
        compressProjectToZip = this.jCheckBoxCompressProjectToZip.isSelected();
        UtilOpciones.objPreferences.getObjPreferencias().putBoolean("compressProjectToZip", compressProjectToZip);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButtonCompile;
    private javax.swing.JCheckBox jCheckBoxAddResourcesToProject;
    private javax.swing.JCheckBox jCheckBoxCompressProjectToZip;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JScrollPane jScrollPane6;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JScrollPane jScrollPane8;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JTabbedPane jTabbedPaneComponentes;
    private javax.swing.JTabbedPane jTabbedPaneEstructuraPaquetes;
    private javax.swing.JTabbedPane jTabbedPaneOpciones;
    private javax.swing.JTable jTableComponentesContenedores;
    private javax.swing.JTable jTableComponentesGeneradoresClase;
    private javax.swing.JTable jTableComponentesIntegradores;
    private javax.swing.JTable jTableComponentesModelosAsociados;
    private javax.swing.JTextField jTextFieldNombreProyecto;
    private javax.swing.JTextField jTextFieldRuta;
    private javax.swing.JTextField jTextFieldUsuario;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JToolBar jToolBar2;
    private javax.swing.JTree jTreeComponentesContenedores;
    private javax.swing.JTree jTreeComponentesGeneradoresClase;
    private javax.swing.JTree jTreeComponentesIntegradores;
    private javax.swing.JTree jTreeComponentesModelosAsociados;
    // End of variables declaration//GEN-END:variables
}